package rdd.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Spark06_RDD_Transform_Test {

    def main(args: Array[String]): Unit = {

        val conf = new SparkConf().setMaster("local[*]").setAppName("RDD Instance")
        val sc = new SparkContext(conf)

        // TODO groupBy的使用案例 : 一组相同key的values求和.
        /*
            TODO 统计每个小时的当前网站的访问量
            83.149.9.216 - - 17/05/2015:10:05:03 +0000 GET /presentations/logstash-monitorama-2013/images/kibana-search.png
         */
        val rdd = sc.textFile("./02-Spark-Tutorial/data/apache.log")

        // TODO word
        // TODO groupBy算子可以实现 WordCount (1 / 10)
        val groupRDD: RDD[(String, Iterable[(String, Int)])] = rdd.map(
            line => {
                val datas = line.split(" ")
                val time = datas(3)
                val times = time.split(":")
                (times(1), 1)
            }
        ).groupBy(_._1)
        groupRDD.collect().foreach(println)
        /*
            使用 groupBy算子后的输出结果如下:
            (06,CompactBuffer((06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1), (06,1)))
            (20,CompactBuffer((20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1), (20,1)))
         */
        groupRDD.mapValues(_.size).collect().foreach(println)
        /*
            (06,366)
            (20,486)
            (19,493)
            (15,496)
            (00,361)
         */
        // TODo word cnt
        sc.stop()
    }
}
